<?php

namespace app\api\service;

use app\admin\model\Member;
use app\admin\model\MessageActivity;
use app\admin\model\MessageNotice;
use app\api\service\igetui\Getui as GetuiService;

use think\Db;
use think\Exception;

class Message
{

    /**
     * 获取未读消息
     */
    public static function getUnreadMessages($memberId){
        if (!$memberId) {
            return ['code' => 0, 'msg' => '参数错误'];
        }

        // 是否加缓存 Cache TODO
        $activityWhere = [
            'member_id' => $memberId,
            'is_read' => 0
        ];
        // 活动推荐数
        $countActivity = MessageActivity::where($activityWhere)->count();
        // 交易物流数
        $logisticsWhere = [
            'member_id' => $memberId,
            'is_read' => 0
        ];
        $countLogistics = db('message_logistics')->where($logisticsWhere)->count();
        // 账号通知
        $noticeWhere = [
            'member_id' => $memberId,
            'is_read' => 0
        ];
        $countNotice = MessageNotice::where($noticeWhere)->count();

        $data = [
            'countActivity' => $countActivity,
            'countLogistics' => $countLogistics,
            'countNotice' => $countNotice,
        ];

        return $data;
    }

    /**
     * 推送交易物流消息
     */
    public static function pushLogistics($data)
    {
        return self::pushAPPMessage($data);
    }

    /**
     * 推送账户通知消息
     */
    public static function pushNotice($data)
    {
        return self::pushAPPMessage($data);
    }

    /**
     * 推送活动通知消息
     */
    public static function pushActivity($data)
    {
        return self::pushAPPMessage($data);
    }

    /**
     * 推送送APP消息
     */
    public static function pushAPPMessage($data)
    {
        /*
        // Android 不能发送透传消息，IOS 只能发送透传消息 TODO
        $data = [
            'template_type' => 1,
            'template_data' => [
                'transmission_type' => 1, // 是否立即启动应用：1 立即启动 2 等待客户端自启动，必填
                'transmission_content' => '测试透传内容', // 透传内容，不支持转义字符，string(2048), 必填
                'title' => '这里是通知栏标题-1-'.date('Y-m-d H:i:s'), // 通知栏标题
                'text' => '这里是通知栏内容-1-'.date('Y-m-d H:i:s'), // 通知栏内容
                'logo'  => '', // 通知栏logo
                'logo_url'  => '', // 通知栏logo链接
                'url'  => 'www.baidu.com',
            ],
            'cid' => 'ff48ca6517226fd0537c0610f9c5107e', // 推送通知至指定用户时填写
            'cid_list' => ['cid1','cid2'], // 推送通知至指定用户列表时填写
        ];
        // 透传消息模版中，当 is_content_available = false 时，title 与 text 必填
        $iosdata = [
            'template_type' => 4,
            'template_data' => [
                'transmission_type' => 2, // 是否立即启动应用：1 立即启动 2 等待客户端自启动，必填
                'transmission_content' => '', // 透传内容，不支持转义字符，string(2048), 必填
                'is_ios' => true, // 是否支持 ios （默认不支持），boolean
                'is_content_available' => false, // 推送是否直接带有透传数据（默认否）, boolean
                'badge' => '', // 应用icon上显示的数字，int
                'sound' => '', // 通知铃声文件名，string
                'category' => '', // 在客户端通知栏触发特定的action和button显示，string
                'custom_msg' => [
                    'key1' => 'value1',
                    'key2' => 'value2',
                ], // 增加自定义的数据
                'title' => '', // 通知标题，string
                'text' => true, // 通知内容，string
            ],
            'cid' => 'cid1', // 推送通知至指定用户时填写
            'cid_list' => ['cid1','cid2'], // 推送通知至指定用户列表时填写
        ];
        */

        $getuiService = new GetuiService();
        if ($data['cid']) {
            // 单推接口 需cid
            $result = $getuiService->pushMessageToSingle($data);
        } elseif ($data['cid_list']) {
            // 多推接口 需cid_list
            $result = $getuiService->pushMessageToList($data);
        } else {
            // 群推接口
            $result = $getuiService->pushMessageToApp($data);
        }
        // 日志
        trace('Getui data: ' . json_encode($data['template_data']), 'log');
        trace('Getui result: ' . json_encode($result), 'log');

        return $result;
    }
}